home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume13 / perl / patches6-10 < prev    next >
Encoding:
Internet Message Format  |  1988-01-30  |  59.6 KB

  1. Subject:  v13i012:  Perl patches 6 to 10, Patch6-Patch10
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rsalz@uunet.UU.NET
  5.  
  6. Submitted-by: Rich $alz <rsalz@bbn.com>
  7. Posting-number: Volume 13, Issue 12
  8. Archive-name: perl/patches6-10
  9.  
  10. This is the second of two files containing the first 10 official patches 
  11. to perl.  They are copies of the articles as I received them on my 
  12. machine. 
  13.  
  14. When you unpack this you will get five separate patch files, each of
  15. which will have to be fed through patch.  Make sure to install all 
  16. 10 patches. 
  17.      /r$
  18.  
  19. #! /bin/sh
  20. # This is a shell archive.  Remove anything before this line, then unpack
  21. # it by saving it into a file and typing "sh file".  To overwrite existing
  22. # files, type "sh file -c".  You can also feed this as standard input via
  23. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  24. # will see the following message at the end:
  25. #        "End of shell archive."
  26. # Contents:  patch6 patch7 patch8 patch9 patch10
  27. # Wrapped by rsalz@fig.bbn.com on Sun Jan 31 13:12:45 1988
  28. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  29. if test -f 'patch6' -a "${1}" != "-c" ; then 
  30.   echo shar: Will not clobber existing file \"'patch6'\"
  31. else
  32. echo shar: Extracting \"'patch6'\" \(3112 characters\)
  33. sed "s/^X//" >'patch6' <<'END_OF_FILE'
  34. XPath: bbn.com!bbn!husc6!cmcl2!beta!hc!ames!elroy!devvax!lroot
  35. XFrom: lroot@devvax.JPL.NASA.GOV (The Superuser)
  36. XNewsgroups: comp.sources.bugs
  37. XSubject: perl 1.0 patch #6
  38. XSummary: This is an official patch for perl 1.0.  Please apply it.
  39. XMessage-ID: <1156@devvax.JPL.NASA.GOV>
  40. XDate: 26 Jan 88 20:35:04 GMT
  41. XOrganization: Jet Propulsion Laboratory, Pasadena, CA
  42. XLines: 97
  43. X
  44. XSystem: perl version 1.0
  45. XPatch #: 6
  46. XPriority: LOW
  47. XSubject: printf doesn't finish processing format string when out of args.
  48. XFrom: isis!aburt (Andrew Burt)
  49. X
  50. XDescription:
  51. X    printf "%% %d %%", 1;  produces "% 1 %%", which is counterintuitive.
  52. X
  53. XFix:    From rn, say "| patch -d DIR", where DIR is your perl source
  54. X    directory.  Outside of rn, say "cd DIR; patch <thisarticle".
  55. X    If you don't have the patch program, apply the following by hand,
  56. X    or get patch.
  57. X
  58. X    If patch indicates that patchlevel is the wrong version, you may need
  59. X    to apply one or more previous patches, or the patch may already
  60. X    have been applied.  See the patchlevel.h file to find out what has or
  61. X    has not been applied.  In any event, don't continue with the patch.
  62. X
  63. X    If you are missing previous patches they can be obtained from me:
  64. X
  65. X    Larry Wall
  66. X    lwall@jpl-devvax.jpl.nasa.gov
  67. X
  68. X    If you send a mail message of the following form it will greatly speed
  69. X    processing:
  70. X
  71. X    Subject: Command
  72. X    @SH mailpatch PATH perl 1.0 LIST
  73. X           ^ note the c
  74. X
  75. X    where PATH is a return path FROM ME TO YOU in Internet notation, and
  76. X    LIST is the number of one or more patches you need, separated by spaces,
  77. X    commas, and/or hyphens.  Saying 35- says everything from 35 to the end.
  78. X
  79. X    You can also get the patches via anonymous FTP from
  80. X    jpl-devvax.jpl.nasa.gov (128.149.8.43).
  81. X
  82. XIndex: patchlevel.h
  83. XPrereq: 5
  84. X1c1
  85. X< #define PATCHLEVEL 5
  86. X---
  87. X> #define PATCHLEVEL 6
  88. XIndex: arg.c
  89. XPrereq: 1.0.1.2
  90. X*** arg.c.old    Tue Jan 26 12:31:23 1988
  91. X--- arg.c    Tue Jan 26 12:31:25 1988
  92. X***************
  93. X*** 1,6 ****
  94. X! /* $Header: arg.c,v 1.0.1.2 88/01/24 03:52:34 root Exp $
  95. X   *
  96. X   * $Log:    arg.c,v $
  97. X   * Revision 1.0.1.2  88/01/24  03:52:34  root
  98. X   * patch 2: added STATBLKS dependencies.
  99. X   * 
  100. X--- 1,9 ----
  101. X! /* $Header: arg.c,v 1.0.1.3 88/01/26 12:30:33 root Exp $
  102. X   *
  103. X   * $Log:    arg.c,v $
  104. X+  * Revision 1.0.1.3  88/01/26  12:30:33  root
  105. X+  * patch 6: sprintf didn't finish processing format string when out of args.
  106. X+  * 
  107. X   * Revision 1.0.1.2  88/01/24  03:52:34  root
  108. X   * patch 2: added STATBLKS dependencies.
  109. X   * 
  110. X***************
  111. X*** 646,656 ****
  112. X      register char *t;
  113. X      bool dolong;
  114. X      char ch;
  115. X  
  116. X      str_set(str,"");
  117. X      len--;            /* don't count pattern string */
  118. X      sarg++;
  119. X!     for (s = str_get(*(sarg++)); *sarg && *s && len; len--) {
  120. X      dolong = FALSE;
  121. X      for (t = s; *t && *t != '%'; t++) ;
  122. X      if (!*t)
  123. X--- 649,664 ----
  124. X      register char *t;
  125. X      bool dolong;
  126. X      char ch;
  127. X+     static STR *sargnull = &str_no;
  128. X  
  129. X      str_set(str,"");
  130. X      len--;            /* don't count pattern string */
  131. X      sarg++;
  132. X!     for (s = str_get(*(sarg++)); *s; len--) {
  133. X!     if (len <= 0 || !*sarg) {
  134. X!         sarg = &sargnull;
  135. X!         len = 0;
  136. X!     }
  137. X      dolong = FALSE;
  138. X      for (t = s; *t && *t != '%'; t++) ;
  139. X      if (!*t)
  140. END_OF_FILE
  141. if test 3112 -ne `wc -c <'patch6'`; then
  142.     echo shar: \"'patch6'\" unpacked with wrong size!
  143. fi
  144. # end of 'patch6'
  145. fi
  146. if test -f 'patch7' -a "${1}" != "-c" ; then 
  147.   echo shar: Will not clobber existing file \"'patch7'\"
  148. else
  149. echo shar: Extracting \"'patch7'\" \(7604 characters\)
  150. sed "s/^X//" >'patch7' <<'END_OF_FILE'
  151. XPath: bbn.com!bbn!uwmcsd1!ig!agate!pasteur!ames!elroy!devvax!lroot
  152. XFrom: lroot@devvax.JPL.NASA.GOV (The Superuser)
  153. XNewsgroups: comp.sources.bugs
  154. XSubject: perl 1.0 patch #7
  155. XSummary: This is an official patch for perl 1.0.  Please apply it.
  156. XMessage-ID: <1158@devvax.JPL.NASA.GOV>
  157. XDate: 26 Jan 88 23:04:26 GMT
  158. XOrganization: Jet Propulsion Laboratory, Pasadena, CA
  159. XLines: 273
  160. X
  161. XSystem: perl version 1.0
  162. XPatch #: 7
  163. XPriority: HIGH if malloc.c doesn't compile
  164. XSubject: use of included malloc.c should be optional
  165. XFrom: gatech!skeeve!arnold (Arnold D. Robbins)
  166. X
  167. XDescription:
  168. X    The version of malloc.c that comes with perl was not really intended
  169. X    to be used everywhere--it was included mostly for debugging purposes.
  170. X    It's a nice little package, however, so I'm making it optional (via
  171. X    Configure) as to whether you want it or not.
  172. X
  173. XFix:    From rn, say "| patch -p0 -d DIR", where DIR is your perl source
  174. X    directory.  Outside of rn, say "cd DIR; patch -p0 <thisarticle".
  175. X    If you don't have the patch program, apply the following by hand,
  176. X    or get patch.
  177. X
  178. X>>> You must say -p0 to patch, or it will try to patch ./Makefile.SH twice,
  179. X>>> instead of patching both ./Makefile.SH and x2p/Makefile.SH.
  180. X
  181. X    If patch indicates that patchlevel is the wrong version, you may need
  182. X    to apply one or more previous patches, or the patch may already
  183. X    have been applied.  See the patchlevel.h file to find out what has or
  184. X    has not been applied.  In any event, don't continue with the patch.
  185. X
  186. X    If you are missing previous patches they can be obtained from me:
  187. X
  188. X    Larry Wall
  189. X    lwall@jpl-devvax.jpl.nasa.gov
  190. X
  191. X    If you send a mail message of the following form it will greatly speed
  192. X    processing:
  193. X
  194. X    Subject: Command
  195. X    @SH mailpatch PATH perl 1.0 LIST
  196. X           ^ note the c
  197. X
  198. X    where PATH is a return path FROM ME TO YOU in Internet notation, and
  199. X    LIST is the number of one or more patches you need, separated by spaces,
  200. X    commas, and/or hyphens.  Saying 35- says everything from 35 to the end.
  201. X
  202. X    You can also get the patches via anonymous FTP from
  203. X    jpl-devvax.jpl.nasa.gov (128.149.8.43).
  204. X
  205. XIndex: patchlevel.h
  206. XPrereq: 6
  207. X1c1
  208. X< #define PATCHLEVEL 6
  209. X---
  210. X> #define PATCHLEVEL 7
  211. XIndex: Configure
  212. XPrereq: 1.0.1.2
  213. X*** Configure.old    Tue Jan 26 14:16:00 1988
  214. X--- Configure    Tue Jan 26 14:16:05 1988
  215. X***************
  216. X*** 8,14 ****
  217. X  # and edit it to reflect your system.  Some packages may include samples
  218. X  # of config.h for certain machines, so you might look for one of those.)
  219. X  #
  220. X! # $Header: Configure,v 1.0.1.2 88/01/24 03:51:55 root Exp $
  221. X  #
  222. X  # Yes, you may rip this off to use in other distribution packages.
  223. X  # (Note: this Configure script was generated automatically.  Rather than
  224. X--- 8,14 ----
  225. X  # and edit it to reflect your system.  Some packages may include samples
  226. X  # of config.h for certain machines, so you might look for one of those.)
  227. X  #
  228. X! # $Header: Configure,v 1.0.1.3 88/01/26 14:14:14 root Exp $
  229. X  #
  230. X  # Yes, you may rip this off to use in other distribution packages.
  231. X  # (Note: this Configure script was generated automatically.  Rather than
  232. X***************
  233. X*** 79,84 ****
  234. X--- 79,87 ----
  235. X  d_voidsig=''
  236. X  libc=''
  237. X  libnm=''
  238. X+ mallocsrc=''
  239. X+ mallocobj=''
  240. X+ usemymalloc=''
  241. X  mansrc=''
  242. X  manext=''
  243. X  models=''
  244. X***************
  245. X*** 1249,1255 ****
  246. X--- 1252,1283 ----
  247. X      esac
  248. X  fi
  249. X  
  250. X+ : determine which malloc to compile in
  251. X  echo " "
  252. X+ case "$usemymalloc" in
  253. X+ '')
  254. X+     if bsd || v7; then
  255. X+     dflt='y'
  256. X+     else
  257. X+     dflt='n'
  258. X+     fi
  259. X+     ;;
  260. X+ *)  dflt="$usemymalloc"
  261. X+     ;;
  262. X+ esac
  263. X+ rp="Do you wish to attempt to use the malloc that comes with $package? [$dflt]"
  264. X+ $echo $n "$rp $c"
  265. X+ . myread
  266. X+ case "$ans" in
  267. X+ '') ans=$dflt;;
  268. X+ esac
  269. X+ usemymalloc="$ans"
  270. X+ case "$ans" in
  271. X+ y*) mallocsrc='malloc.c'; mallocobj='malloc.o';;
  272. X+ *) mallocsrc=''; mallocobj='';;
  273. X+ esac
  274. X+ 
  275. X+ echo " "
  276. X  echo "End of configuration questions."
  277. X  echo " "
  278. X  
  279. X***************
  280. X*** 1309,1314 ****
  281. X--- 1337,1345 ----
  282. X  d_voidsig='$d_voidsig'
  283. X  libc='$libc'
  284. X  libnm='$libnm'
  285. X+ mallocsrc='$mallocsrc'
  286. X+ mallocobj='$mallocobj'
  287. X+ usemymalloc='$usemymalloc'
  288. X  mansrc='$mansrc'
  289. X  manext='$manext'
  290. X  models='$models'
  291. XIndex: Makefile.SH
  292. XPrereq: 1.0.1.2
  293. X*** Makefile.SH.old    Tue Jan 26 14:55:03 1988
  294. X--- Makefile.SH    Tue Jan 26 14:15:06 1988
  295. X***************
  296. X*** 14,22 ****
  297. X  esac
  298. X  echo "Extracting Makefile (with variable substitutions)"
  299. X  cat >Makefile <<!GROK!THIS!
  300. X! # $Header: Makefile.SH,v 1.0.1.2 88/01/26 08:46:04 root Exp $
  301. X  #
  302. X  # $Log:    Makefile.SH,v $
  303. X  # Revision 1.0.1.2  88/01/26  08:46:04  root
  304. X  # patch 4: make depend didn't work right if . wasn't in PATH.
  305. X  # 
  306. X--- 14,25 ----
  307. X  esac
  308. X  echo "Extracting Makefile (with variable substitutions)"
  309. X  cat >Makefile <<!GROK!THIS!
  310. X! # $Header: Makefile.SH,v 1.0.1.3 88/01/26 14:14:52 root Exp $
  311. X  #
  312. X  # $Log:    Makefile.SH,v $
  313. X+ # Revision 1.0.1.3  88/01/26  14:14:52  root
  314. X+ # Added mallocsrc stuff.
  315. X+ # 
  316. X  # Revision 1.0.1.2  88/01/26  08:46:04  root
  317. X  # patch 4: make depend didn't work right if . wasn't in PATH.
  318. X  # 
  319. X***************
  320. X*** 36,41 ****
  321. X--- 39,46 ----
  322. X  LDFLAGS = $ldflags
  323. X  SMALL = $small
  324. X  LARGE = $large $split
  325. X+ mallocsrc = $mallocsrc
  326. X+ mallocobj = $mallocobj
  327. X  
  328. X  libs = $libnm -lm
  329. X  !GROK!THIS!
  330. X***************
  331. X*** 57,68 ****
  332. X  
  333. X  h = $(h1) $(h2)
  334. X  
  335. X! c1 = arg.c array.c cmd.c dump.c form.c hash.c malloc.c
  336. X  c2 = search.c stab.c str.c util.c version.c
  337. X  
  338. X  c = $(c1) $(c2)
  339. X  
  340. X! obj1 = arg.o array.o cmd.o dump.o form.o hash.o malloc.o
  341. X  obj2 = search.o stab.o str.o util.o version.o
  342. X  
  343. X  obj = $(obj1) $(obj2)
  344. X--- 62,73 ----
  345. X  
  346. X  h = $(h1) $(h2)
  347. X  
  348. X! c1 = arg.c array.c cmd.c dump.c form.c hash.c $(mallocsrc)
  349. X  c2 = search.c stab.c str.c util.c version.c
  350. X  
  351. X  c = $(c1) $(c2)
  352. X  
  353. X! obj1 = arg.o array.o cmd.o dump.o form.o hash.o $(mallocobj)
  354. X  obj2 = search.o stab.o str.o util.o version.o
  355. X  
  356. X  obj = $(obj1) $(obj2)
  357. X
  358. XIf this complains below, perhaps you neglected to say patch -p0.
  359. XIf so, patch is trying to apply this patch to ./Makefile.SH instead
  360. Xof x2p/Makefile.SH.  Abort this patch and reapply as you did before
  361. Xonly this time add both -p0 and -N, e.g.
  362. X    patch -p0 -N -d DIR < thisarticle
  363. X
  364. XIndex: x2p/Makefile.SH
  365. XPrereq: 1.0
  366. X*** x2p/Makefile.SH.old    Tue Jan 26 14:16:41 1988
  367. X--- x2p/Makefile.SH    Tue Jan 26 14:17:13 1988
  368. X***************
  369. X*** 12,22 ****
  370. X  case "$0" in
  371. X  */*) cd `expr X$0 : 'X\(.*\)/'` ;;
  372. X  esac
  373. X  echo "Extracting x2p/Makefile (with variable substitutions)"
  374. X  cat >Makefile <<!GROK!THIS!
  375. X! # $Header: Makefile.SH,v 1.0 87/12/18 17:50:17 root Exp $
  376. X  #
  377. X  # $Log:    Makefile.SH,v $
  378. X  # Revision 1.0  87/12/18  17:50:17  root
  379. X  # Initial revision
  380. X  # 
  381. X--- 12,29 ----
  382. X  case "$0" in
  383. X  */*) cd `expr X$0 : 'X\(.*\)/'` ;;
  384. X  esac
  385. X+ case "$mallocsrc" in
  386. X+ '') ;;
  387. X+ *) mallocsrc="../$mallocsrc";;
  388. X+ esac
  389. X  echo "Extracting x2p/Makefile (with variable substitutions)"
  390. X  cat >Makefile <<!GROK!THIS!
  391. X! # $Header: Makefile.SH,v 1.0.1.1 88/01/26 14:15:24 root Exp $
  392. X  #
  393. X  # $Log:    Makefile.SH,v $
  394. X+ # Revision 1.0.1.1  88/01/26  14:15:24  root
  395. X+ # Added mallocsrc stuff.
  396. X+ # 
  397. X  # Revision 1.0  87/12/18  17:50:17  root
  398. X  # Initial revision
  399. X  # 
  400. X***************
  401. X*** 31,36 ****
  402. X--- 38,45 ----
  403. X  LDFLAGS = $ldflags
  404. X  SMALL = $small
  405. X  LARGE = $large $split
  406. X+ mallocsrc = $mallocsrc
  407. X+ mallocobj = $mallocobj
  408. X  
  409. X  libs = $libnm -lm
  410. X  !GROK!THIS!
  411. X***************
  412. X*** 49,57 ****
  413. X  
  414. X  h = EXTERN.h INTERN.h config.h handy.h hash.h a2p.h str.h util.h
  415. X  
  416. X! c = hash.c ../malloc.c str.c util.c walk.c
  417. X  
  418. X! obj = hash.o malloc.o str.o util.o walk.o
  419. X  
  420. X  lintflags = -phbvxac
  421. X  
  422. X--- 58,66 ----
  423. X  
  424. X  h = EXTERN.h INTERN.h config.h handy.h hash.h a2p.h str.h util.h
  425. X  
  426. X! c = hash.c $(mallocsrc) str.c util.c walk.c
  427. X  
  428. X! obj = hash.o $(mallocobj) str.o util.o walk.o
  429. X  
  430. X  lintflags = -phbvxac
  431. X  
  432. END_OF_FILE
  433. if test 7604 -ne `wc -c <'patch7'`; then
  434.     echo shar: \"'patch7'\" unpacked with wrong size!
  435. fi
  436. # end of 'patch7'
  437. fi
  438. if test -f 'patch8' -a "${1}" != "-c" ; then 
  439.   echo shar: Will not clobber existing file \"'patch8'\"
  440. else
  441. echo shar: Extracting \"'patch8'\" \(35848 characters\)
  442. sed "s/^X//" >'patch8' <<'END_OF_FILE'
  443. XPath: bbn.com!bbn!uwmcsd1!ig!agate!pasteur!ames!elroy!devvax!lroot
  444. XFrom: lroot@devvax.JPL.NASA.GOV (The Superuser)
  445. XNewsgroups: comp.sources.bugs
  446. XSubject: perl 1.0 patch #8
  447. XSummary: This is an official patch for perl 1.0.  Please apply it.
  448. XMessage-ID: <1174@devvax.JPL.NASA.GOV>
  449. XDate: 28 Jan 88 19:44:05 GMT
  450. XOrganization: Jet Propulsion Laboratory, Pasadena, CA
  451. XLines: 1437
  452. X
  453. XSystem: perl version 1.0
  454. XPatch #: 8
  455. XPriority: ENHANCEMENT
  456. XSubject: perl needed an eval operator and a symbolic debugger
  457. XFrom: lwall@jpl-devvax.jpl.nasa.gov (Larry Wall)
  458. X
  459. XDescription:
  460. X    I didn't add an eval operator to the original perl because
  461. X    I hadn't thought of any good uses for it.  Recently I thought
  462. X    of some.  Along with creating the eval operator, this patch
  463. X    introduces a symbolic debugger for perl scripts, which makes
  464. X    use of eval to interpret some debugging commands.  Having eval
  465. X    also lets me emulate awk's FOO=bar command line behavior with
  466. X    a line such as the one a2p now inserts at the beginning of
  467. X    translated scripts.
  468. X
  469. XFix:    From rn, say "| patch -p0 -d DIR", where DIR is your perl source
  470. X                  ^^^
  471. X    directory.  Outside of rn, say "cd DIR; patch -p0 <thisarticle".
  472. X    If you don't have the patch program, apply the following by hand,
  473. X    or get patch.
  474. X
  475. X>>>>    YOU MUST USE THE -p0 SWITCH ABOVE OR PATCH WON'T WORK RIGHT.   <<<<
  476. X
  477. X    If patch indicates that patchlevel is the wrong version, you may need
  478. X    to apply one or more previous patches, or the patch may already
  479. X    have been applied.  See the patchlevel.h file to find out what has or
  480. X    has not been applied.  In any event, don't continue with the patch.
  481. X
  482. X    If you are missing previous patches they can be obtained from me:
  483. X
  484. X    Larry Wall
  485. X    lwall@jpl-devvax.jpl.nasa.gov
  486. X
  487. X    If you send a mail message of the following form it will greatly speed
  488. X    processing:
  489. X
  490. X    Subject: Command
  491. X    @SH mailpatch PATH perl 1.0 LIST
  492. X           ^ note the c
  493. X
  494. X    where PATH is a return path FROM ME TO YOU in Internet notation, and
  495. X    LIST is the number of one or more patches you need, separated by spaces,
  496. X    commas, and/or hyphens.  Saying 35- says everything from 35 to the end.
  497. X
  498. X    You can also get the patches via anonymous FTP from
  499. X    jpl-devvax.jpl.nasa.gov (128.149.8.43).
  500. X
  501. XIndex: patchlevel.h
  502. XPrereq: 7
  503. X1c1
  504. X< #define PATCHLEVEL 7
  505. X---
  506. X> #define PATCHLEVEL 8
  507. XIndex: Makefile.SH
  508. XPrereq: 1.0.1.3
  509. X*** Makefile.SH.old    Thu Jan 28 11:08:32 1988
  510. X--- Makefile.SH    Thu Jan 28 11:08:33 1988
  511. X***************
  512. X*** 14,22 ****
  513. X  esac
  514. X  echo "Extracting Makefile (with variable substitutions)"
  515. X  cat >Makefile <<!GROK!THIS!
  516. X! # $Header: Makefile.SH,v 1.0.1.3 88/01/26 14:14:52 root Exp $
  517. X  #
  518. X  # $Log:    Makefile.SH,v $
  519. X  # Revision 1.0.1.3  88/01/26  14:14:52  root
  520. X  # Added mallocsrc stuff.
  521. X  # 
  522. X--- 14,25 ----
  523. X  esac
  524. X  echo "Extracting Makefile (with variable substitutions)"
  525. X  cat >Makefile <<!GROK!THIS!
  526. X! # $Header: Makefile.SH,v 1.0.1.4 88/01/28 10:17:59 root Exp $
  527. X  #
  528. X  # $Log:    Makefile.SH,v $
  529. X+ # Revision 1.0.1.4  88/01/28  10:17:59  root
  530. X+ # patch8: added perldb.man
  531. X+ # 
  532. X  # Revision 1.0.1.3  88/01/26  14:14:52  root
  533. X  # Added mallocsrc stuff.
  534. X  # 
  535. X***************
  536. X*** 47,57 ****
  537. X  
  538. X  cat >>Makefile <<'!NO!SUBS!'
  539. X  
  540. X! public = perl
  541. X  
  542. X  private = 
  543. X  
  544. X! manpages = perl.man
  545. X  
  546. X  util =
  547. X  
  548. X--- 50,60 ----
  549. X  
  550. X  cat >>Makefile <<'!NO!SUBS!'
  551. X  
  552. X! public = perl perldb
  553. X  
  554. X  private = 
  555. X  
  556. X! manpages = perl.man perldb.man
  557. X  
  558. X  util =
  559. X  
  560. XIf you are sitting there wondering why patch didn't find x2p/a2py.c, perhaps
  561. Xit is because you didn't say -p0 to patch.  If so, abort patch now and run
  562. Xit again as you did, but add the following switches: -p0 -N
  563. X
  564. XIndex: x2p/a2py.c
  565. XPrereq: 1.0
  566. X*** x2p/a2py.c.old    Thu Jan 28 11:18:17 1988
  567. X--- x2p/a2py.c    Thu Jan 28 11:18:18 1988
  568. X***************
  569. X*** 1,6 ****
  570. X! /* $Header: a2py.c,v 1.0 87/12/18 17:50:33 root Exp $
  571. X   *
  572. X   * $Log:    a2py.c,v $
  573. X   * Revision 1.0  87/12/18  17:50:33  root
  574. X   * Initial revision
  575. X   * 
  576. X--- 1,9 ----
  577. X! /* $Header: a2py.c,v 1.0.1.1 88/01/28 11:07:08 root Exp $
  578. X   *
  579. X   * $Log:    a2py.c,v $
  580. X+  * Revision 1.0.1.1  88/01/28  11:07:08  root
  581. X+  * patch8: added support for FOO=bar switches using eval.
  582. X+  * 
  583. X   * Revision 1.0  87/12/18  17:50:33  root
  584. X   * Initial revision
  585. X   * 
  586. X***************
  587. X*** 114,119 ****
  588. X--- 117,126 ----
  589. X  
  590. X      tmpstr = walk(0,0,root,&i);
  591. X      str = str_make("#!/bin/perl\n\n");
  592. X+     str_cat(str,
  593. X+       "eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift;\n");
  594. X+     str_cat(str,
  595. X+       "            # process any FOO=bar switches\n\n");
  596. X      if (do_opens && opens) {
  597. X      str_scat(str,opens);
  598. X      str_free(opens);
  599. XIndex: arg.c
  600. XPrereq: 1.0.1.3
  601. X*** arg.c.old    Thu Jan 28 11:08:43 1988
  602. X--- arg.c    Thu Jan 28 11:08:46 1988
  603. X***************
  604. X*** 1,8 ****
  605. X! /* $Header: arg.c,v 1.0.1.3 88/01/26 12:30:33 root Exp $
  606. X   *
  607. X   * $Log:    arg.c,v $
  608. X!  * Revision 1.0.1.3  88/01/26  12:30:33  root
  609. X!  * patch 6: sprintf didn't finish processing format string when out of args.
  610. X   * 
  611. X   * Revision 1.0.1.2  88/01/24  03:52:34  root
  612. X   * patch 2: added STATBLKS dependencies.
  613. X--- 1,8 ----
  614. X! /* $Header: arg.c,v 1.0.1.4 88/01/28 10:22:06 root Exp $
  615. X   *
  616. X   * $Log:    arg.c,v $
  617. X!  * Revision 1.0.1.4  88/01/28  10:22:06  root
  618. X!  * patch8: added eval operator.
  619. X   * 
  620. X   * Revision 1.0.1.2  88/01/24  03:52:34  root
  621. X   * patch 2: added STATBLKS dependencies.
  622. X***************
  623. X*** 1190,1195 ****
  624. X--- 1190,1196 ----
  625. X      opargs[O_UNSHIFT] =        A(1,0,0);
  626. X      opargs[O_LINK] =        A(1,1,0);
  627. X      opargs[O_REPEAT] =        A(1,1,0);
  628. X+     opargs[O_EVAL] =        A(1,0,0);
  629. X  }
  630. X  
  631. X  #ifdef VOIDSIG
  632. X***************
  633. X*** 2091,2096 ****
  634. X--- 2092,2102 ----
  635. X          astore(ary,0,str);
  636. X      }
  637. X      value = (double)(ary->ary_fill + 1);
  638. X+     break;
  639. X+     case O_EVAL:
  640. X+     str_sset(str,
  641. X+         do_eval(arg[1].arg_type != A_NULL ? sarg[1] : defstab->stab_val) );
  642. X+     STABSET(str);
  643. X      break;
  644. X      }
  645. X  #ifdef DEBUGGING
  646. XIndex: arg.h
  647. XPrereq: 1.0
  648. X*** arg.h.old    Thu Jan 28 11:08:59 1988
  649. X--- arg.h    Thu Jan 28 11:09:00 1988
  650. X***************
  651. X*** 1,6 ****
  652. X! /* $Header: arg.h,v 1.0 87/12/18 13:04:39 root Exp $
  653. X   *
  654. X   * $Log:    arg.h,v $
  655. X   * Revision 1.0  87/12/18  13:04:39  root
  656. X   * Initial revision
  657. X   * 
  658. X--- 1,9 ----
  659. X! /* $Header: arg.h,v 1.0.1.1 88/01/28 10:22:40 root Exp $
  660. X   *
  661. X   * $Log:    arg.h,v $
  662. X+  * Revision 1.0.1.1  88/01/28  10:22:40  root
  663. X+  * patch8: added eval operator.
  664. X+  * 
  665. X   * Revision 1.0  87/12/18  13:04:39  root
  666. X   * Initial revision
  667. X   * 
  668. X***************
  669. X*** 111,117 ****
  670. X  #define O_UNSHIFT 102
  671. X  #define O_LINK 103
  672. X  #define O_REPEAT 104
  673. X! #define MAXO 105
  674. X  
  675. X  #ifndef DOINIT
  676. X  extern char *opname[];
  677. X--- 114,121 ----
  678. X  #define O_UNSHIFT 102
  679. X  #define O_LINK 103
  680. X  #define O_REPEAT 104
  681. X! #define O_EVAL 105
  682. X! #define MAXO 106
  683. X  
  684. X  #ifndef DOINIT
  685. X  extern char *opname[];
  686. X***************
  687. X*** 222,228 ****
  688. X      "UNSHIFT",
  689. X      "LINK",
  690. X      "REPEAT",
  691. X!     "105"
  692. X  };
  693. X  #endif
  694. X  
  695. X--- 226,233 ----
  696. X      "UNSHIFT",
  697. X      "LINK",
  698. X      "REPEAT",
  699. X!     "EVAL",
  700. X!     "106"
  701. X  };
  702. X  #endif
  703. X  
  704. XIndex: t/base.lex
  705. XPrereq: 1.0
  706. X*** t/base.lex.old    Thu Jan 28 11:17:55 1988
  707. X--- t/base.lex    Thu Jan 28 11:17:56 1988
  708. X***************
  709. X*** 1,8 ****
  710. X  #!./perl
  711. X  
  712. X! # $Header: base.lex,v 1.0 87/12/18 13:11:51 root Exp $
  713. X  
  714. X! print "1..4\n";
  715. X  
  716. X  $ # this is the register <space>
  717. X  = 'x';
  718. X--- 1,8 ----
  719. X  #!./perl
  720. X  
  721. X! # $Header: base.lex,v 1.0.1.1 88/01/28 10:37:00 root Exp $
  722. X  
  723. X! print "1..6\n";
  724. X  
  725. X  $ # this is the register <space>
  726. X  = 'x';
  727. X***************
  728. X*** 21,23 ****
  729. X--- 21,32 ----
  730. X  $x = '\\'; # ';
  731. X  
  732. X  if (length($x) == 1) {print "ok 4\n";} else {print "not ok 4\n";}
  733. X+ 
  734. X+ eval 'while (0) {
  735. X+     print "foo\n";
  736. X+ }
  737. X+ /^/ && (print "ok 5\n");
  738. X+ ';
  739. X+ 
  740. X+ eval '$foo{1} / 1;';
  741. X+ if (!$@) {print "ok 6\n";} else {print "not ok 6\n";}
  742. XIndex: cmd.h
  743. XPrereq: 1.0
  744. X*** cmd.h.old    Thu Jan 28 11:09:05 1988
  745. X--- cmd.h    Thu Jan 28 11:09:06 1988
  746. X***************
  747. X*** 1,6 ****
  748. X! /* $Header: cmd.h,v 1.0 87/12/18 13:04:59 root Exp $
  749. X   *
  750. X   * $Log:    cmd.h,v $
  751. X   * Revision 1.0  87/12/18  13:04:59  root
  752. X   * Initial revision
  753. X   * 
  754. X--- 1,9 ----
  755. X! /* $Header: cmd.h,v 1.0.1.1 88/01/28 10:23:07 root Exp $
  756. X   *
  757. X   * $Log:    cmd.h,v $
  758. X+  * Revision 1.0.1.1  88/01/28  10:23:07  root
  759. X+  * patch8: added eval_root for eval operator.
  760. X+  * 
  761. X   * Revision 1.0  87/12/18  13:04:59  root
  762. X   * Initial revision
  763. X   * 
  764. X***************
  765. X*** 106,111 ****
  766. X--- 109,115 ----
  767. X  #define Nullcmd Null(CMD*)
  768. X  
  769. X  EXT CMD *main_root INIT(Nullcmd);
  770. X+ EXT CMD *eval_root INIT(Nullcmd);
  771. X  
  772. X  EXT struct compcmd {
  773. X      CMD *comp_true;
  774. XIndex: t/op.eval
  775. X*** t/op.eval.old    Thu Jan 28 11:18:04 1988
  776. X--- t/op.eval    Thu Jan 28 11:18:04 1988
  777. X***************
  778. X*** 0 ****
  779. X--- 1,20 ----
  780. X+ #!./perl
  781. X+ 
  782. X+ print "1..6\n";
  783. X+ 
  784. X+ eval 'print "ok 1\n";';
  785. X+ 
  786. X+ if ($@ eq '') {print "ok 2\n";} else {print "not ok 2\n";}
  787. X+ 
  788. X+ eval "\$foo\n    = # this is a comment\n'ok 3';";
  789. X+ print $foo,"\n";
  790. X+ 
  791. X+ eval "\$foo\n    = # this is a comment\n'ok 4\n';";
  792. X+ print $foo;
  793. X+ 
  794. X+ eval '
  795. X+ $foo =';        # this tests for a call through yyerror()
  796. X+ if ($@ =~ /line 2/) {print "ok 5\n";} else {print "not ok 5\n";}
  797. X+ 
  798. X+ eval '$foo = /';    # this tests for a call through fatal()
  799. X+ if ($@ =~ /Search/) {print "ok 6\n";} else {print "not ok 6\n";}
  800. XIndex: perl.h
  801. XPrereq: 1.0.1.2
  802. X*** perl.h.old    Thu Jan 28 11:09:13 1988
  803. X--- perl.h    Thu Jan 28 11:09:14 1988
  804. X***************
  805. X*** 1,6 ****
  806. X! /* $Header: perl.h,v 1.0.1.2 88/01/24 03:53:47 root Exp $
  807. X   *
  808. X   * $Log:    perl.h,v $
  809. X   * Revision 1.0.1.2  88/01/24  03:53:47  root
  810. X   * patch 2: hid str_peek() in #ifdef DEBUGGING.
  811. X   * 
  812. X--- 1,9 ----
  813. X! /* $Header: perl.h,v 1.0.1.3 88/01/28 10:24:17 root Exp $
  814. X   *
  815. X   * $Log:    perl.h,v $
  816. X+  * Revision 1.0.1.3  88/01/28  10:24:17  root
  817. X+  * patch8: added eval operator.
  818. X+  * 
  819. X   * Revision 1.0.1.2  88/01/24  03:53:47  root
  820. X   * patch 2: hid str_peek() in #ifdef DEBUGGING.
  821. X   * 
  822. X***************
  823. X*** 103,109 ****
  824. X  STR *arg_to_str();
  825. X  STR *str_new();
  826. X  STR *stab_str();
  827. X! STR *eval();
  828. X  
  829. X  FCMD *load_format();
  830. X  
  831. X--- 106,113 ----
  832. X  STR *arg_to_str();
  833. X  STR *str_new();
  834. X  STR *stab_str();
  835. X! STR *eval();        /* this evaluates expressions */
  836. X! STR *do_eval();        /* this evaluates eval operator */
  837. X  
  838. X  FCMD *load_format();
  839. X  
  840. X***************
  841. X*** 164,169 ****
  842. X--- 168,174 ----
  843. X  EXT char tokenbuf[256];
  844. X  EXT int expectterm INIT(TRUE);
  845. X  EXT int lex_newlines INIT(FALSE);
  846. X+ EXT int in_eval INIT(FALSE);
  847. X  
  848. X  FILE *popen();
  849. X  /* char *str_get(); */
  850. X***************
  851. X*** 196,201 ****
  852. X--- 201,207 ----
  853. X  EXT int loop_ptr INIT(-1);
  854. X  
  855. X  EXT jmp_buf top_env;
  856. X+ EXT jmp_buf eval_env;
  857. X  
  858. X  EXT char *goto_targ INIT(Nullch);    /* cmd_exec gets strange when set */
  859. X  
  860. XIndex: perl.y
  861. XPrereq: 1.0
  862. X*** perl.y.old    Thu Jan 28 11:09:22 1988
  863. X--- perl.y    Thu Jan 28 11:09:24 1988
  864. X***************
  865. X*** 1,6 ****
  866. X! /* $Header: perl.y,v 1.0 87/12/18 15:48:59 root Exp $
  867. X   *
  868. X   * $Log:    perl.y,v $
  869. X   * Revision 1.0  87/12/18  15:48:59  root
  870. X   * Initial revision
  871. X   * 
  872. X--- 1,9 ----
  873. X! /* $Header: perl.y,v 1.0.1.1 88/01/28 10:25:31 root Exp $
  874. X   *
  875. X   * $Log:    perl.y,v $
  876. X+  * Revision 1.0.1.1  88/01/28  10:25:31  root
  877. X+  * patch8: added eval operator.
  878. X+  * 
  879. X   * Revision 1.0  87/12/18  15:48:59  root
  880. X   * Initial revision
  881. X   * 
  882. X***************
  883. X*** 97,103 ****
  884. X  %% /* RULES */
  885. X  
  886. X  prog    :    lineseq
  887. X!             { main_root = block_head($1); }
  888. X      ;
  889. X  
  890. X  compblock:    block CONTINUE block
  891. X--- 100,109 ----
  892. X  %% /* RULES */
  893. X  
  894. X  prog    :    lineseq
  895. X!             { if (in_eval)
  896. X!                 eval_root = block_head($1);
  897. X!                 else
  898. X!                 main_root = block_head($1); }
  899. X      ;
  900. X  
  901. X  compblock:    block CONTINUE block
  902. XIndex: perldb
  903. X*** perldb.old    Thu Jan 28 11:17:03 1988
  904. X--- perldb    Thu Jan 28 11:17:04 1988
  905. X***************
  906. X*** 0 ****
  907. X--- 1,296 ----
  908. X+ #!/bin/perl
  909. X+ 
  910. X+ # $Header: perldb,v 1.0.1.1 88/01/28 10:27:16 root Exp $
  911. X+ #
  912. X+ # $Log:    perldb,v $
  913. X+ # Revision 1.0.1.1  88/01/28  10:27:16  root
  914. X+ # patch8: created this file.
  915. X+ # 
  916. X+ #
  917. X+ 
  918. X+ $tmp = "/tmp/pdb$$";        # default temporary file, -o overrides.
  919. X+ 
  920. X+ # parse any switches
  921. X+ 
  922. X+ while ($ARGV[0] =~ /^-/) {
  923. X+     $_ = shift;
  924. X+     /^-o$/ && ($tmp = shift,next);
  925. X+     die "Unrecognized switch: $_";
  926. X+ }
  927. X+ 
  928. X+ $filename = shift;
  929. X+ die "Usage: perldb [-o output] scriptname arguments" unless $filename;
  930. X+ 
  931. X+ open(script,$filename) || die "Can't find $filename";
  932. X+ 
  933. X+ open(tmp, ">$tmp") || die "Can't make temp script";
  934. X+ 
  935. X+ $perl = '/bin/perl';
  936. X+ $init = 1;
  937. X+ $state = 'statement';
  938. X+ 
  939. X+ # now translate script to contain DB calls at the appropriate places
  940. X+ 
  941. X+ while (<script>) {
  942. X+     chop;
  943. X+     if ($. == 1) {
  944. X+     if (/^#! *([^ \t]*) (-[^ \t]*)/) {
  945. X+         $perl = $1;
  946. X+         $switch = $2;
  947. X+     }
  948. X+     elsif (/^#! *([^ \t]*)/) {
  949. X+         $perl = $1;
  950. X+     }
  951. X+     }
  952. X+     s/ *$//;
  953. X+     push(@script,$_);        # remember line for DBinit
  954. X+     $line = $_;
  955. X+     next if /^$/;        # blank lines are uninteresting
  956. X+     next if /^[ \t]*#/;        # likewise comment lines
  957. X+     if ($init) {
  958. X+     print tmp "do DBinit($.);"; $init = '';
  959. X+     }
  960. X+     if ($inform) {        # skip formats
  961. X+     if (/^\.$/) {
  962. X+         $inform = '';
  963. X+         $state = 'statement';
  964. X+     }
  965. X+     next;
  966. X+     }
  967. X+     if (/^[ \t]*format /) {
  968. X+     $inform++;
  969. X+     next;
  970. X+     }
  971. X+     if ($state eq 'statement' && !/^[ \t]*}/) {
  972. X+     if (s/^([ \t]*[A-Za-z_0-9]+:)//) {
  973. X+         $label = $1;
  974. X+     }
  975. X+     else {
  976. X+         $label = '';
  977. X+     }
  978. X+     $line = $label . "do DB($.); " . $_;    # all that work for this line
  979. X+     }
  980. X+     else {
  981. X+     $script[$#script - 1] .= ' ';    # mark line as having continuation
  982. X+     }
  983. X+     do parse();                # set $state to correct eol value
  984. X+ }
  985. X+ continue {
  986. X+     print tmp $line,"\n";
  987. X+ }
  988. X+ 
  989. X+ # now put out our debugging subroutines.  First the one that's called all over.
  990. X+ 
  991. X+ print tmp '
  992. X+ sub DB {
  993. X+     push(@DB,$. ,$@, $!, $[, $,, $/, $\ );
  994. X+     $[ = 0; $, = ""; $/ = "\n"; $\ = "";
  995. X+     $DBline=pop(@_);
  996. X+     if ($DBsingle || $DBstop[$DBline] || $DBtrace) {
  997. X+     print "$DBline:\t",$DBline[$DBline],"\n";
  998. X+     for ($DBi = $DBline; $DBline[$DBi++] =~ / $/; ) {
  999. X+         print "$DBi:\t",$DBline[$DBi],"\n";
  1000. X+     }
  1001. X+     }
  1002. X+     if ($DBaction[$DBline]) {
  1003. X+     eval $DBaction[$DBline];  print $@;
  1004. X+     }
  1005. X+     if ($DBstop[$DBline] || $DBsingle) {
  1006. X+     for (;;) {
  1007. X+         print "perldb> ";
  1008. X+         $DBcmd = <stdin>;
  1009. X+         last if $DBcmd =~ /^$/;
  1010. X+         if ($DBcmd =~ /^q$/) {
  1011. X+         exit 0;
  1012. X+         }
  1013. X+         if ($DBcmd =~ /^h$/) {
  1014. X+         print "
  1015. X+ s        Single step.
  1016. X+ c        Continue.
  1017. X+ <CR>        Repeat last s or c.
  1018. X+ l min-max    List lines.
  1019. X+ l line        List line.
  1020. X+ l        List the whole program.
  1021. X+ L        List breakpoints.
  1022. X+ t        Toggle trace mode.
  1023. X+ b line        Set breakpoint.
  1024. X+ d line        Delete breakpoint.
  1025. X+ d        Delete breakpoint at this line.
  1026. X+ a line command    Set an action for this line.
  1027. X+ q        Quit.
  1028. X+ command        Execute as a perl statement.
  1029. X+ 
  1030. X+ ";
  1031. X+         next;
  1032. X+         }
  1033. X+         if ($DBcmd =~ /^t$/) {
  1034. X+         $DBtrace = !$DBtrace;
  1035. X+         print "Trace = $DBtrace\n";
  1036. X+         next;
  1037. X+         }
  1038. X+         if ($DBcmd =~ /^l (.*)[-,](.*)/) {
  1039. X+         for ($DBi = $1; $DBi <= $2; $DBi++) {
  1040. X+             print "$DBi:\t", $DBline[$DBi], "\n";
  1041. X+         }
  1042. X+         next;
  1043. X+         }
  1044. X+         if ($DBcmd =~ /^l (.*)/) {
  1045. X+         print "$1:\t", $DBline[$1], "\n";
  1046. X+         next;
  1047. X+         }
  1048. X+         if ($DBcmd =~ /^l$/) {
  1049. X+         for ($DBi = 1; $DBi <= $DBmax ; $DBi++) {
  1050. X+             print "$DBi:\t", $DBline[$DBi], "\n";
  1051. X+         }
  1052. X+         next;
  1053. X+         }
  1054. X+         if ($DBcmd =~ /^L$/) {
  1055. X+         for ($DBi = 1; $DBi <= $DBmax ; $DBi++) {
  1056. X+             print "$DBi:\t", $DBline[$DBi], "\n" if $DBstop[$DBi];
  1057. X+         }
  1058. X+         next;
  1059. X+         }
  1060. X+         if ($DBcmd =~ /^b (.*)/) {
  1061. X+         $DBi = $1;
  1062. X+         if ($DBline[$DBi-1] =~ / $/) {
  1063. X+             print "Line $DBi not breakable.\n";
  1064. X+         }
  1065. X+         else {
  1066. X+             $DBstop[$DBi] = 1;
  1067. X+         }
  1068. X+         next;
  1069. X+         }
  1070. X+         if ($DBcmd =~ /^d (.*)/) {
  1071. X+         $DBstop[$1] = 0;
  1072. X+         next;
  1073. X+         }
  1074. X+         if ($DBcmd =~ /^d$/) {
  1075. X+         $DBstop[$DBline] = 0;
  1076. X+         next;
  1077. X+         }
  1078. X+         if ($DBcmd =~ /^a ([0-9]+)[ \t]+(.*)/) {
  1079. X+         $DBi = $1;
  1080. X+         $DBaction = $2;
  1081. X+         $DBaction .= ";" unless $DBaction =~ /[;}]$/;
  1082. X+         $DBaction[$DBi] = $DBaction;
  1083. X+         next;
  1084. X+         }
  1085. X+         if ($DBcmd =~ /^s$/) {
  1086. X+         $DBsingle = 1;
  1087. X+         last;
  1088. X+         }
  1089. X+         if ($DBcmd =~ /^c$/) {
  1090. X+         $DBsingle = 0;
  1091. X+         last;
  1092. X+         }
  1093. X+         chop($DBcmd);
  1094. X+         $DBcmd .= ";" unless $DBcmd =~ /[;}]$/;
  1095. X+         eval $DBcmd;
  1096. X+         print $@,"\n";
  1097. X+     }
  1098. X+     }
  1099. X+     $\ = pop(@DB);
  1100. X+     $/ = pop(@DB);
  1101. X+     $, = pop(@DB);
  1102. X+     $[ = pop(@DB);
  1103. X+     $! = pop(@DB);
  1104. X+     $@ = pop(@DB);
  1105. X+     $. = pop(@DB);
  1106. X+ }
  1107. X+ 
  1108. X+ sub DBinit {
  1109. X+     $DBstop[$_[0]] = 1;
  1110. X+ ';
  1111. X+ print tmp "    \$0 = '$script';\n";
  1112. X+ print tmp "    \$DBmax = $.;\n";
  1113. X+ print tmp "    unlink '/tmp/pdb$$';\n";        # expected to fail on -o.
  1114. X+ for ($i = 1; $#script >= 0; $i++) {
  1115. X+     $_ = shift(@script);
  1116. X+     s/'/\\'/g;
  1117. X+     print tmp "    \$DBline[$i] = '$_';\n";
  1118. X+ }
  1119. X+ print tmp '}
  1120. X+ ';
  1121. X+ 
  1122. X+ close tmp;
  1123. X+ 
  1124. X+ # prepare to run the new script
  1125. X+ 
  1126. X+ unshift(@ARGV,$tmp);
  1127. X+ unshift(@ARGV,$switch) if $switch;
  1128. X+ unshift(@ARGV,$perl);
  1129. X+ exec @ARGV;
  1130. X+ 
  1131. X+ # This routine tokenizes one perl line good enough to tell what state we are
  1132. X+ # in by the end of the line, so we can tell if the next line should contain
  1133. X+ # a call to DB or not.
  1134. X+ 
  1135. X+ sub parse {
  1136. X+     until ($_ eq '') {
  1137. X+     $ord = ord($_);
  1138. X+     if ($quoting) {
  1139. X+         if ($quote == $ord) {
  1140. X+         $quoting--;
  1141. X+         }
  1142. X+         s/^.//            if /^[\\]/;
  1143. X+         s/^.//;
  1144. X+         last if $_ eq "\n";
  1145. X+         $state = 'term'        unless $quoting;
  1146. X+         next;
  1147. X+     }
  1148. X+     if ($ord > 64) {
  1149. X+         do quote(ord($1),1), next    if s/^m\b(.)//;
  1150. X+         do quote(ord($1),2), next    if s/^s\b(.)//;
  1151. X+         do quote(ord($1),2), next    if s/^y\b(.)//;
  1152. X+         do quote(ord($1),2), next    if s/^tr\b(.)//;
  1153. X+         next            if s/^[A-Za-z_][A-Za-z_0-9]*://;
  1154. X+         $state = 'term', next    if s/^eof\b//;
  1155. X+         $state = 'term', next    if s/^shift\b//;
  1156. X+         $state = 'term', next    if s/^split\b//;
  1157. X+         $state = 'term', next    if s/^tell\b//;
  1158. X+         $state = 'term', next    if s/^write\b//;
  1159. X+         $state = 'operator', next    if s/^[A-Za-z_][A-Za-z_0-9]*//;
  1160. X+         $state = 'operator', next    if s/^[~^|]+//;
  1161. X+         $state = 'statement', next    if s/^{//;
  1162. X+         $state = 'statement', next    if s/^}[ \t]*$//;
  1163. X+         $state = 'statement', next    if s/^}[ \t]*#/#/;
  1164. X+         $state = 'term', next    if s/^}//;
  1165. X+         $state = 'operator', next    if s/^\[//;
  1166. X+         $state = 'term', next    if s/^]//;
  1167. X+         die "Illegal character $_";
  1168. X+     }
  1169. X+     elsif ($ord < 33) {
  1170. X+         next if s/[ \t\n]+//;
  1171. X+         die "Illegal character $_";
  1172. X+     }
  1173. X+     else {
  1174. X+         $state = 'statement', next    if s/^;//;
  1175. X+         $state = 'term', next    if s/^\.[0-9eE]+//;
  1176. X+         $state = 'term', next    if s/^[0-9][0-9xaAbBcCddeEfF.]*//;
  1177. X+         $state = 'term', next    if s/^\$[A-Za-z_][A-Za-z_0-9]*//;
  1178. X+         $state = 'term', next    if s/^\$.//;
  1179. X+         $state = 'term', next    if s/^@[A-Za-z_][A-Za-z_0-9]*//;
  1180. X+         $state = 'term', next    if s/^@.//;
  1181. X+         $state = 'term', next    if s/^<[A-Za-z_0-9]*>//;
  1182. X+         next            if s/^\+\+//;
  1183. X+         next            if s/^--//;
  1184. X+         $state = 'operator', next    if s/^[(!%&*-=+:,.<>]//;
  1185. X+         $state = 'term', next    if s/^\)+//;
  1186. X+         do quote($ord,1), next    if s/^'//;
  1187. X+         do quote($ord,1), next    if s/^"//;
  1188. X+         if (s|^[/?]||) {
  1189. X+         if ($state =~ /stat|oper/) {
  1190. X+             $state = 'term';
  1191. X+             do quote($ord,1), next;
  1192. X+         }
  1193. X+         $state = 'operator', next;
  1194. X+         }
  1195. X+         next            if s/^#.*//;
  1196. X+     }
  1197. X+     }
  1198. X+ }
  1199. X+ 
  1200. X+ sub quote {
  1201. X+     ($quote,$quoting) = @_;
  1202. X+     $state = 'quote';
  1203. X+ }
  1204. XIndex: perldb.man
  1205. X*** perldb.man.old    Thu Jan 28 11:17:11 1988
  1206. X--- perldb.man    Thu Jan 28 11:17:12 1988
  1207. X***************
  1208. X*** 0 ****
  1209. X--- 1,119 ----
  1210. X+ .rn '' }`
  1211. X+ ''' $Header: perldb.man,v 1.0.1.1 88/01/28 10:28:19 root Exp $
  1212. X+ ''' 
  1213. X+ ''' $Log:    perldb.man,v $
  1214. X+ ''' Revision 1.0.1.1  88/01/28  10:28:19  root
  1215. X+ ''' patch8: created this file.
  1216. X+ ''' 
  1217. X+ ''' 
  1218. X+ .de Sh
  1219. X+ .br
  1220. X+ .ne 5
  1221. X+ .PP
  1222. X+ \fB\\$1\fR
  1223. X+ .PP
  1224. X+ ..
  1225. X+ .de Sp
  1226. X+ .if t .sp .5v
  1227. X+ .if n .sp
  1228. X+ ..
  1229. X+ .de Ip
  1230. X+ .br
  1231. X+ .ie \\n.$>=3 .ne \\$3
  1232. X+ .el .ne 3
  1233. X+ .IP "\\$1" \\$2
  1234. X+ ..
  1235. X+ '''
  1236. X+ '''     Set up \*(-- to give an unbreakable dash;
  1237. X+ '''     string Tr holds user defined translation string.
  1238. X+ '''     Bell System Logo is used as a dummy character.
  1239. X+ '''
  1240. X+ .tr \(bs-|\(bv\*(Tr
  1241. X+ .ie n \{\
  1242. X+ .ds -- \(bs-
  1243. X+ .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
  1244. X+ .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
  1245. X+ .ds L" ""
  1246. X+ .ds R" ""
  1247. X+ .ds L' '
  1248. X+ .ds R' '
  1249. X+ 'br\}
  1250. X+ .el\{\
  1251. X+ .ds -- \(em\|
  1252. X+ .tr \*(Tr
  1253. X+ .ds L" ``
  1254. X+ .ds R" ''
  1255. X+ .ds L' `
  1256. X+ .ds R' '
  1257. X+ 'br\}
  1258. X+ .TH PERLDB 1 LOCAL
  1259. X+ .SH NAME
  1260. X+ perldb - Perl Debugger
  1261. X+ .SH SYNOPSIS
  1262. X+ .B perldb [-o output] perlscript arguments
  1263. X+ .SH DESCRIPTION
  1264. X+ .I Perldb
  1265. X+ is a symbolic debugger for
  1266. X+ .I perl
  1267. X+ scripts.
  1268. X+ Run your script just as you normally would, only prepend \*(L"perldb\*(R" to
  1269. X+ the command.
  1270. X+ (On systems where #! doesn't work, put any perl switches into the #! line
  1271. X+ anyway\*(--perldb will pass them off to perl when it runs the script.)
  1272. X+ Perldb copies your script to a temporary file, instrumenting it in the process
  1273. X+ and adding a debugging monitor.
  1274. X+ It then executes the instrumented script for
  1275. X+ you and stops at the first statement so you can set any breakpoints or actions
  1276. X+ you desire.
  1277. X+ .PP
  1278. X+ There is only one switch: \-o, which tells perldb to put its temporary file
  1279. X+ in the filename you specify, and to refrain from deleting the file.
  1280. X+ Use this switch if you intend to rerun the instrumented script, or want to
  1281. X+ look at it for some reason.
  1282. X+ .PP
  1283. X+ These are the debugging commands:
  1284. X+ .Ip s 8
  1285. X+ Single step.
  1286. X+ Subsequent carriage returns will single step.
  1287. X+ .Ip c 8
  1288. X+ Continue.
  1289. X+ Turns off single step mode and runs till the next break point.
  1290. X+ Subsequent carriage returns will continue.
  1291. X+ .Ip <CR> 8
  1292. X+ Repeat last s or c.
  1293. X+ .Ip "l min-max" 8
  1294. X+ List lines in the indicated range.
  1295. X+ .Ip "l line" 8
  1296. X+ List indicated line.
  1297. X+ .Ip l 8
  1298. X+ List the whole program.
  1299. X+ .Ip L 8
  1300. X+ List breakpoints.
  1301. X+ .Ip t 8
  1302. X+ Toggle trace mode.
  1303. X+ .Ip "b line" 8
  1304. X+ Set breakpoint at indicated line.
  1305. X+ .Ip "d line" 8
  1306. X+ Delete breakpoint at indicated line.
  1307. X+ .Ip d 8
  1308. X+ Delete breakpoint at this line.
  1309. X+ .Ip "a line command" 8
  1310. X+ Set an action for indicated line.
  1311. X+ The command must be a valid perl command, except that a missing trailing ;
  1312. X+ will be supplied.
  1313. X+ .Ip q 8
  1314. X+ Quit.
  1315. X+ .Ip command 8
  1316. X+ Execute command as a perl statement.
  1317. X+ A missing trailing ; will be supplied if necessary.
  1318. X+ .SH ENVIRONMENT
  1319. X+ No environment variables are used by perldb.
  1320. X+ .SH AUTHOR
  1321. X+ Larry Wall <lwall@jpl-devvax.Jpl.Nasa.Gov>
  1322. X+ .SH FILES
  1323. X+ /tmp/pdb$$    temporary file for instrumented script
  1324. X+ .SH SEE ALSO
  1325. X+ perl    
  1326. X+ .SH DIAGNOSTICS
  1327. X+ .SH BUGS
  1328. X+ .rn }` ''
  1329. XIndex: perly.c
  1330. XPrereq: 1.0.1.2
  1331. X*** perly.c.old    Thu Jan 28 11:17:22 1988
  1332. X--- perly.c    Thu Jan 28 11:17:25 1988
  1333. X***************
  1334. X*** 1,6 ****
  1335. X! char rcsid[] = "$Header: perly.c,v 1.0.1.2 88/01/24 00:06:03 root Exp $";
  1336. X  /*
  1337. X   * $Log:    perly.c,v $
  1338. X   * Revision 1.0.1.2  88/01/24  00:06:03  root
  1339. X   * patch 2: s/(abc)/\1/ grandfathering didn't work right.
  1340. X   * 
  1341. X--- 1,9 ----
  1342. X! char rcsid[] = "$Header: perly.c,v 1.0.1.3 88/01/28 10:28:31 root Exp $";
  1343. X  /*
  1344. X   * $Log:    perly.c,v $
  1345. X+  * Revision 1.0.1.3  88/01/28  10:28:31  root
  1346. X+  * patch8: added eval operator.  Also fixed expectterm following right curly.
  1347. X+  * 
  1348. X   * Revision 1.0.1.2  88/01/24  00:06:03  root
  1349. X   * patch 2: s/(abc)/\1/ grandfathering didn't work right.
  1350. X   * 
  1351. X***************
  1352. X*** 16,21 ****
  1353. X--- 19,25 ----
  1354. X  bool assume_n = FALSE;
  1355. X  bool assume_p = FALSE;
  1356. X  bool doswitches = FALSE;
  1357. X+ bool allstabs = FALSE;        /* init all customary symbols in symbol table?*/
  1358. X  char *filename;
  1359. X  char *e_tmpname = "/tmp/perl-eXXXXXX";
  1360. X  FILE *e_fp = Nullfp;
  1361. X***************
  1362. X*** 161,172 ****
  1363. X          str_numset(stabent(argv[0]+1,TRUE)->stab_val,(double)1.0);
  1364. X      }
  1365. X      }
  1366. X!     if (argvstab = stabent("ARGV",FALSE)) {
  1367. X      for (; argc > 0; argc--,argv++) {
  1368. X          apush(argvstab->stab_array,str_make(argv[0]));
  1369. X      }
  1370. X      }
  1371. X!     if (envstab = stabent("ENV",FALSE)) {
  1372. X      for (; *env; env++) {
  1373. X          if (!(s = index(*env,'=')))
  1374. X          continue;
  1375. X--- 165,176 ----
  1376. X          str_numset(stabent(argv[0]+1,TRUE)->stab_val,(double)1.0);
  1377. X      }
  1378. X      }
  1379. X!     if (argvstab = stabent("ARGV",allstabs)) {
  1380. X      for (; argc > 0; argc--,argv++) {
  1381. X          apush(argvstab->stab_array,str_make(argv[0]));
  1382. X      }
  1383. X      }
  1384. X!     if (envstab = stabent("ENV",allstabs)) {
  1385. X      for (; *env; env++) {
  1386. X          if (!(s = index(*env,'=')))
  1387. X          continue;
  1388. X***************
  1389. X*** 177,188 ****
  1390. X          *--s = '=';
  1391. X      }
  1392. X      }
  1393. X!     sigstab = stabent("SIG",FALSE);
  1394. X  
  1395. X      magicalize("!#?^~=-%0123456789.+&*(),\\/[|");
  1396. X  
  1397. X!     (tmpstab = stabent("0",FALSE)) && str_set(STAB_STR(tmpstab),filename);
  1398. X!     (tmpstab = stabent("$",FALSE)) &&
  1399. X      str_numset(STAB_STR(tmpstab),(double)getpid());
  1400. X  
  1401. X      tmpstab = stabent("stdin",TRUE);
  1402. X--- 181,192 ----
  1403. X          *--s = '=';
  1404. X      }
  1405. X      }
  1406. X!     sigstab = stabent("SIG",allstabs);
  1407. X  
  1408. X      magicalize("!#?^~=-%0123456789.+&*(),\\/[|");
  1409. X  
  1410. X!     (tmpstab = stabent("0",allstabs)) && str_set(STAB_STR(tmpstab),filename);
  1411. X!     (tmpstab = stabent("$",allstabs)) &&
  1412. X      str_numset(STAB_STR(tmpstab),(double)getpid());
  1413. X  
  1414. X      tmpstab = stabent("stdin",TRUE);
  1415. X***************
  1416. X*** 198,203 ****
  1417. X--- 202,209 ----
  1418. X      tmpstab = stabent("stderr",TRUE);
  1419. X      tmpstab->stab_io = stio_new();
  1420. X      tmpstab->stab_io->fp = stderr;
  1421. X+     safefree(filename);
  1422. X+     filename = "(eval)";
  1423. X  
  1424. X      setjmp(top_env);    /* sets goto_targ on longjump */
  1425. X  
  1426. X***************
  1427. X*** 225,231 ****
  1428. X  
  1429. X      sym[1] = '\0';
  1430. X      while (*sym = *list++) {
  1431. X!     if (stab = stabent(sym,FALSE)) {
  1432. X          stab->stab_flags = SF_VMAGIC;
  1433. X          stab->stab_val->str_link.str_magic = stab;
  1434. X      }
  1435. X--- 231,237 ----
  1436. X  
  1437. X      sym[1] = '\0';
  1438. X      while (*sym = *list++) {
  1439. X!     if (stab = stabent(sym,allstabs)) {
  1440. X          stab->stab_flags = SF_VMAGIC;
  1441. X          stab->stab_val->str_link.str_magic = stab;
  1442. X      }
  1443. X***************
  1444. X*** 322,328 ****
  1445. X          filename = savestr(s);
  1446. X          s = str_get(linestr);
  1447. X      }
  1448. X!     *s = '\0';
  1449. X      if (lex_newlines)
  1450. X          RETURN('\n');
  1451. X      goto retry;
  1452. X--- 328,342 ----
  1453. X          filename = savestr(s);
  1454. X          s = str_get(linestr);
  1455. X      }
  1456. X!     if (in_eval) {
  1457. X!         while (*s && *s != '\n')
  1458. X!         s++;
  1459. X!         if (*s)
  1460. X!         s++;
  1461. X!         line++;
  1462. X!     }
  1463. X!     else
  1464. X!         *s = '\0';
  1465. X      if (lex_newlines)
  1466. X          RETURN('\n');
  1467. X      goto retry;
  1468. X***************
  1469. X*** 350,358 ****
  1470. X      OPERATOR(tmp);
  1471. X      case ')':
  1472. X      case ']':
  1473. X-     case '}':
  1474. X      tmp = *s++;
  1475. X      TERM(tmp);
  1476. X      case '&':
  1477. X      s++;
  1478. X      tmp = *s++;
  1479. X--- 364,378 ----
  1480. X      OPERATOR(tmp);
  1481. X      case ')':
  1482. X      case ']':
  1483. X      tmp = *s++;
  1484. X      TERM(tmp);
  1485. X+     case '}':
  1486. X+     tmp = *s++;
  1487. X+     for (d = s; *d == ' ' || *d == '\t'; d++) ;
  1488. X+     if (*d == '\n' || *d == '#')
  1489. X+         OPERATOR(tmp);        /* block end */
  1490. X+     else
  1491. X+         TERM(tmp);            /* associative array end */
  1492. X      case '&':
  1493. X      s++;
  1494. X      tmp = *s++;
  1495. X***************
  1496. X*** 508,513 ****
  1497. X--- 528,537 ----
  1498. X          OPERATOR(SEQ);
  1499. X      if (strEQ(d,"exit"))
  1500. X          UNI(O_EXIT);
  1501. X+     if (strEQ(d,"eval")) {
  1502. X+         allstabs = TRUE;        /* must initialize everything since */
  1503. X+         UNI(O_EVAL);        /* we don't know what will be used */
  1504. X+     }
  1505. X      if (strEQ(d,"eof"))
  1506. X          TERM(FEOF);
  1507. X      if (strEQ(d,"exp"))
  1508. X***************
  1509. X*** 1480,1487 ****
  1510. X      strcpy(tname,"^?");
  1511. X      else
  1512. X      sprintf(tname,"%c",yychar);
  1513. X!     printf("%s in file %s at line %d, next token \"%s\"\n",
  1514. X        s,filename,line,tname);
  1515. X  }
  1516. X  
  1517. X  char *
  1518. X--- 1504,1515 ----
  1519. X      strcpy(tname,"^?");
  1520. X      else
  1521. X      sprintf(tname,"%c",yychar);
  1522. X!     sprintf(tokenbuf, "%s in file %s at line %d, next token \"%s\"\n",
  1523. X        s,filename,line,tname);
  1524. X+     if (in_eval)
  1525. X+     str_set(stabent("@",TRUE)->stab_val,tokenbuf);
  1526. X+     else
  1527. X+     fputs(tokenbuf,stderr);
  1528. X  }
  1529. X  
  1530. X  char *
  1531. X***************
  1532. X*** 1964,1970 ****
  1533. X          str_numset(str, (double)str_len(s1));
  1534. X          break;
  1535. X      case O_SUBSTR:
  1536. X!         if (arg[3].arg_type != A_SINGLE || stabent("[",FALSE)) {
  1537. X          str_free(str);        /* making the fallacious assumption */
  1538. X          str = Nullstr;        /* that any $[ occurs before substr()*/
  1539. X          }
  1540. X--- 1992,1998 ----
  1541. X          str_numset(str, (double)str_len(s1));
  1542. X          break;
  1543. X      case O_SUBSTR:
  1544. X!         if (arg[3].arg_type != A_SINGLE || stabent("[",allstabs)) {
  1545. X          str_free(str);        /* making the fallacious assumption */
  1546. X          str = Nullstr;        /* that any $[ occurs before substr()*/
  1547. X          }
  1548. X***************
  1549. X*** 2463,2466 ****
  1550. X--- 2491,2619 ----
  1551. X      bufptr = str_get(linestr);
  1552. X      yyerror("Format not terminated");
  1553. X      return froot.f_next;
  1554. X+ }
  1555. X+ 
  1556. X+ STR *
  1557. X+ do_eval(str)
  1558. X+ STR *str;
  1559. X+ {
  1560. X+     int retval;
  1561. X+     CMD *myroot;
  1562. X+ 
  1563. X+     in_eval++;
  1564. X+     str_set(stabent("@",TRUE)->stab_val,"");
  1565. X+     line = 1;
  1566. X+     str_sset(linestr,str);
  1567. X+     bufptr = str_get(linestr);
  1568. X+     if (setjmp(eval_env))
  1569. X+     retval = 1;
  1570. X+     else
  1571. X+     retval = yyparse();
  1572. X+     myroot = eval_root;        /* in case cmd_exec does another eval! */
  1573. X+     if (retval)
  1574. X+     str = &str_no;
  1575. X+     else {
  1576. X+     str = cmd_exec(eval_root);
  1577. X+     cmd_free(myroot);    /* can't free on error, for some reason */
  1578. X+     }
  1579. X+     in_eval--;
  1580. X+     return str;
  1581. X+ }
  1582. X+ 
  1583. X+ cmd_free(cmd)
  1584. X+ register CMD *cmd;
  1585. X+ {
  1586. X+     register CMD *tofree;
  1587. X+     register CMD *head = cmd;
  1588. X+ 
  1589. X+     while (cmd) {
  1590. X+     if (cmd->c_label)
  1591. X+         safefree(cmd->c_label);
  1592. X+     if (cmd->c_first)
  1593. X+         str_free(cmd->c_first);
  1594. X+     if (cmd->c_spat)
  1595. X+         spat_free(cmd->c_spat);
  1596. X+     if (cmd->c_expr)
  1597. X+         arg_free(cmd->c_expr);
  1598. X+     switch (cmd->c_type) {
  1599. X+     case C_WHILE:
  1600. X+     case C_BLOCK:
  1601. X+     case C_IF:
  1602. X+         if (cmd->ucmd.ccmd.cc_true)
  1603. X+         cmd_free(cmd->ucmd.ccmd.cc_true);
  1604. X+         if (cmd->c_type == C_IF && cmd->ucmd.ccmd.cc_alt)
  1605. X+         cmd_free(cmd->ucmd.ccmd.cc_alt,Nullcmd);
  1606. X+         break;
  1607. X+     case C_EXPR:
  1608. X+         if (cmd->ucmd.acmd.ac_stab)
  1609. X+         arg_free(cmd->ucmd.acmd.ac_stab);
  1610. X+         if (cmd->ucmd.acmd.ac_expr)
  1611. X+         arg_free(cmd->ucmd.acmd.ac_expr);
  1612. X+         break;
  1613. X+     }
  1614. X+     tofree = cmd;
  1615. X+     cmd = cmd->c_next;
  1616. X+     safefree((char*)tofree);
  1617. X+     if (cmd && cmd == head)        /* reached end of while loop */
  1618. X+         break;
  1619. X+     }
  1620. X+ }
  1621. X+ 
  1622. X+ arg_free(arg)
  1623. X+ register ARG *arg;
  1624. X+ {
  1625. X+     register int i;
  1626. X+ 
  1627. X+     for (i = 1; i <= arg->arg_len; i++) {
  1628. X+     switch (arg[i].arg_type) {
  1629. X+     case A_NULL:
  1630. X+         break;
  1631. X+     case A_LEXPR:
  1632. X+     case A_EXPR:
  1633. X+         arg_free(arg[i].arg_ptr.arg_arg);
  1634. X+         break;
  1635. X+     case A_CMD:
  1636. X+         cmd_free(arg[i].arg_ptr.arg_cmd);
  1637. X+         break;
  1638. X+     case A_STAB:
  1639. X+     case A_LVAL:
  1640. X+     case A_READ:
  1641. X+     case A_ARYLEN:
  1642. X+         break;
  1643. X+     case A_SINGLE:
  1644. X+     case A_DOUBLE:
  1645. X+     case A_BACKTICK:
  1646. X+         str_free(arg[i].arg_ptr.arg_str);
  1647. X+         break;
  1648. X+     case A_SPAT:
  1649. X+         spat_free(arg[i].arg_ptr.arg_spat);
  1650. X+         break;
  1651. X+     case A_NUMBER:
  1652. X+         break;
  1653. X+     }
  1654. X+     }
  1655. X+     free_arg(arg);
  1656. X+ }
  1657. X+ 
  1658. X+ spat_free(spat)
  1659. X+ register SPAT *spat;
  1660. X+ {
  1661. X+     register SPAT *sp;
  1662. X+ 
  1663. X+     if (spat->spat_runtime)
  1664. X+     arg_free(spat->spat_runtime);
  1665. X+     if (spat->spat_repl) {
  1666. X+     arg_free(spat->spat_repl);
  1667. X+     }
  1668. X+     free_compex(&spat->spat_compex);
  1669. X+ 
  1670. X+     /* now unlink from spat list */
  1671. X+     if (spat_root == spat)
  1672. X+     spat_root = spat->spat_next;
  1673. X+     else {
  1674. X+     for (sp = spat_root; sp->spat_next != spat; sp = sp->spat_next) ;
  1675. X+     sp->spat_next = spat->spat_next;
  1676. X+     }
  1677. X+ 
  1678. X+     safefree((char*)spat);
  1679. X  }
  1680. XIndex: search.c
  1681. XPrereq: 1.0.1.1
  1682. X*** search.c.old    Thu Jan 28 11:17:36 1988
  1683. X--- search.c    Thu Jan 28 11:17:37 1988
  1684. X***************
  1685. X*** 1,6 ****
  1686. X! /* $Header: search.c,v 1.0.1.1 88/01/24 03:55:05 root Exp $
  1687. X   *
  1688. X   * $Log:    search.c,v $
  1689. X   * Revision 1.0.1.1  88/01/24  03:55:05  root
  1690. X   * patch 2: made depend on perl.h.
  1691. X   * 
  1692. X--- 1,9 ----
  1693. X! /* $Header: search.c,v 1.0.1.2 88/01/28 10:30:46 root Exp $
  1694. X   *
  1695. X   * $Log:    search.c,v $
  1696. X+  * Revision 1.0.1.2  88/01/28  10:30:46  root
  1697. X+  * patch8: uncommented free_compex for use with eval operator.
  1698. X+  * 
  1699. X   * Revision 1.0.1.1  88/01/24  03:55:05  root
  1700. X   * patch 2: made depend on perl.h.
  1701. X   * 
  1702. X***************
  1703. X*** 107,113 ****
  1704. X      compex->subbase = Nullch;
  1705. X  }
  1706. X  
  1707. X- #ifdef NOTUSED
  1708. X  void
  1709. X  free_compex(compex)
  1710. X  register COMPEX *compex;
  1711. X--- 110,115 ----
  1712. X***************
  1713. X*** 121,127 ****
  1714. X      compex->subbase = Nullch;
  1715. X      }
  1716. X  }
  1717. X- #endif
  1718. X  
  1719. X  static char *gbr_str = Nullch;
  1720. X  static int gbr_siz = 0;
  1721. X--- 123,128 ----
  1722. XIndex: stab.c
  1723. XPrereq: 1.0
  1724. X*** stab.c.old    Thu Jan 28 11:17:44 1988
  1725. X--- stab.c    Thu Jan 28 11:17:45 1988
  1726. X***************
  1727. X*** 1,6 ****
  1728. X! /* $Header: stab.c,v 1.0 87/12/18 13:06:14 root Exp $
  1729. X   *
  1730. X   * $Log:    stab.c,v $
  1731. X   * Revision 1.0  87/12/18  13:06:14  root
  1732. X   * Initial revision
  1733. X   * 
  1734. X--- 1,9 ----
  1735. X! /* $Header: stab.c,v 1.0.1.1 88/01/28 10:35:17 root Exp $
  1736. X   *
  1737. X   * $Log:    stab.c,v $
  1738. X+  * Revision 1.0.1.1  88/01/28  10:35:17  root
  1739. X+  * patch8: changed some stabents to support eval operator.
  1740. X+  * 
  1741. X   * Revision 1.0  87/12/18  13:06:14  root
  1742. X   * Initial revision
  1743. X   * 
  1744. X***************
  1745. X*** 169,180 ****
  1746. X      case '^':
  1747. X          safefree(curoutstab->stab_io->top_name);
  1748. X          curoutstab->stab_io->top_name = str_get(str);
  1749. X!         curoutstab->stab_io->top_stab = stabent(str_get(str),FALSE);
  1750. X          break;
  1751. X      case '~':
  1752. X          safefree(curoutstab->stab_io->fmt_name);
  1753. X          curoutstab->stab_io->fmt_name = str_get(str);
  1754. X!         curoutstab->stab_io->fmt_stab = stabent(str_get(str),FALSE);
  1755. X          break;
  1756. X      case '=':
  1757. X          curoutstab->stab_io->page_len = (long)str_gnum(str);
  1758. X--- 172,183 ----
  1759. X      case '^':
  1760. X          safefree(curoutstab->stab_io->top_name);
  1761. X          curoutstab->stab_io->top_name = str_get(str);
  1762. X!         curoutstab->stab_io->top_stab = stabent(str_get(str),TRUE);
  1763. X          break;
  1764. X      case '~':
  1765. X          safefree(curoutstab->stab_io->fmt_name);
  1766. X          curoutstab->stab_io->fmt_name = str_get(str);
  1767. X!         curoutstab->stab_io->fmt_stab = stabent(str_get(str),TRUE);
  1768. X          break;
  1769. X      case '=':
  1770. X          curoutstab->stab_io->page_len = (long)str_gnum(str);
  1771. X***************
  1772. X*** 274,280 ****
  1773. X      ARRAY *savearray;
  1774. X      STR *str;
  1775. X  
  1776. X!     stab = stabent(str_get(hfetch(sigstab->stab_hash,sig_name[sig])),FALSE);
  1777. X      savearray = defstab->stab_array;
  1778. X      defstab->stab_array = anew();
  1779. X      str = str_new(0);
  1780. X--- 277,283 ----
  1781. X      ARRAY *savearray;
  1782. X      STR *str;
  1783. X  
  1784. X!     stab = stabent(str_get(hfetch(sigstab->stab_hash,sig_name[sig])),TRUE);
  1785. X      savearray = defstab->stab_array;
  1786. X      defstab->stab_array = anew();
  1787. X      str = str_new(0);
  1788. XIndex: util.c
  1789. XPrereq: 1.0
  1790. X*** util.c.old    Thu Jan 28 11:18:10 1988
  1791. X--- util.c    Thu Jan 28 11:18:10 1988
  1792. X***************
  1793. X*** 1,6 ****
  1794. X! /* $Header: util.c,v 1.0 87/12/18 13:06:30 root Exp $
  1795. X   *
  1796. X   * $Log:    util.c,v $
  1797. X   * Revision 1.0  87/12/18  13:06:30  root
  1798. X   * Initial revision
  1799. X   * 
  1800. X--- 1,9 ----
  1801. X! /* $Header: util.c,v 1.0.1.1 88/01/28 11:06:35 root Exp $
  1802. X   *
  1803. X   * $Log:    util.c,v $
  1804. X+  * Revision 1.0.1.1  88/01/28  11:06:35  root
  1805. X+  * patch8: changed fatal() to support eval operator with exiting.
  1806. X+  * 
  1807. X   * Revision 1.0  87/12/18  13:06:30  root
  1808. X   * Initial revision
  1809. X   * 
  1810. X***************
  1811. X*** 205,210 ****
  1812. X--- 208,218 ----
  1813. X      extern FILE *e_fp;
  1814. X      extern char *e_tmpname;
  1815. X  
  1816. X+     if (in_eval) {
  1817. X+     sprintf(tokenbuf,pat,a1,a2,a3,a4);
  1818. X+     str_set(stabent("@",TRUE)->stab_val,tokenbuf);
  1819. X+     longjmp(eval_env,1);
  1820. X+     }
  1821. X      fprintf(stderr,pat,a1,a2,a3,a4);
  1822. X      if (e_fp)
  1823. X      UNLINK(e_tmpname);
  1824. XIndex: x2p/walk.c
  1825. XPrereq: 1.0
  1826. X*** x2p/walk.c.old    Thu Jan 28 11:18:25 1988
  1827. X--- x2p/walk.c    Thu Jan 28 11:18:26 1988
  1828. X***************
  1829. X*** 1,6 ****
  1830. X! /* $Header: walk.c,v 1.0 87/12/18 13:07:40 root Exp $
  1831. X   *
  1832. X   * $Log:    walk.c,v $
  1833. X   * Revision 1.0  87/12/18  13:07:40  root
  1834. X   * Initial revision
  1835. X   * 
  1836. X--- 1,9 ----
  1837. X! /* $Header: walk.c,v 1.0.1.1 88/01/28 11:07:56 root Exp $
  1838. X   *
  1839. X   * $Log:    walk.c,v $
  1840. X+  * Revision 1.0.1.1  88/01/28  11:07:56  root
  1841. X+  * patch8: changed some misleading comments.
  1842. X+  * 
  1843. X   * Revision 1.0  87/12/18  13:07:40  root
  1844. X   * Initial revision
  1845. X   * 
  1846. X***************
  1847. X*** 68,80 ****
  1848. X          str_cat(str,"';\t\t# field separator from -F switch\n");
  1849. X      }
  1850. X      else if (saw_FS && !const_FS) {
  1851. X!         str_cat(str,"$FS = '[ \\t\\n]+';\t\t# default field separator\n");
  1852. X      }
  1853. X      if (saw_OFS) {
  1854. X!         str_cat(str,"$, = ' ';\t\t# default output field separator\n");
  1855. X      }
  1856. X      if (saw_ORS) {
  1857. X!         str_cat(str,"$\\ = \"\\n\";\t\t# default output record separator\n");
  1858. X      }
  1859. X      if (str->str_cur > 20)
  1860. X          str_cat(str,"\n");
  1861. X--- 71,83 ----
  1862. X          str_cat(str,"';\t\t# field separator from -F switch\n");
  1863. X      }
  1864. X      else if (saw_FS && !const_FS) {
  1865. X!         str_cat(str,"$FS = '[ \\t\\n]+';\t\t# set field separator\n");
  1866. X      }
  1867. X      if (saw_OFS) {
  1868. X!         str_cat(str,"$, = ' ';\t\t# set output field separator\n");
  1869. X      }
  1870. X      if (saw_ORS) {
  1871. X!         str_cat(str,"$\\ = \"\\n\";\t\t# set output record separator\n");
  1872. X      }
  1873. X      if (str->str_cur > 20)
  1874. X          str_cat(str,"\n");
  1875. END_OF_FILE
  1876. if test 35848 -ne `wc -c <'patch8'`; then
  1877.     echo shar: \"'patch8'\" unpacked with wrong size!
  1878. fi
  1879. # end of 'patch8'
  1880. fi
  1881. if test -f 'patch9' -a "${1}" != "-c" ; then 
  1882.   echo shar: Will not clobber existing file \"'patch9'\"
  1883. else
  1884. echo shar: Extracting \"'patch9'\" \(6348 characters\)
  1885. sed "s/^X//" >'patch9' <<'END_OF_FILE'
  1886. XPath: bbn.com!bbn!husc6!hao!ames!elroy!devvax!lroot
  1887. XFrom: lroot@devvax.JPL.NASA.GOV (The Superuser)
  1888. XNewsgroups: comp.sources.bugs
  1889. XSubject: perl 1.0 patch #9
  1890. XSummary: This is an official patch for perl 1.0.  Please apply it.
  1891. XMessage-ID: <1187@devvax.JPL.NASA.GOV>
  1892. XDate: 30 Jan 88 17:16:02 GMT
  1893. XOrganization: Jet Propulsion Laboratory, Pasadena, CA
  1894. XLines: 198
  1895. X
  1896. XSystem: perl version 1.0
  1897. XPatch #: 9
  1898. XPriority: HIGH for SysV sites
  1899. XSubject: 3 portability problems
  1900. XFrom: pttesac!Marnix!vanam (Marnix (ain't unix!) A.  van\ Ammers)
  1901. X
  1902. XDescription:
  1903. X    There's a #define YYDEBUG; in perl.h that ought to be
  1904. X    #define YYDEBUG 1.  Interesting that it works the former way on
  1905. X    any systems at all.
  1906. X
  1907. X    Patch 2 was defective and introduced a couple of lines with missing
  1908. X    right parens.  Learn something old every day...
  1909. X
  1910. X    Some awks can't handle
  1911. X        awk '$6 != "" {print substr($6,2,100)}' </tmp/Cppsym2$$ ;;
  1912. X    if field 6 doesn't exist.  Changed conditional to NF > 5.
  1913. X
  1914. X    There was also a problem that I fixed in metaconfig that involved
  1915. X    Configure grepping .SH files out of MANIFEST when the .SH was only
  1916. X    in the commentary.  This doesn't affect perl's Configure because
  1917. X    there aren't any comments containing .SH in the MANIFEST file.
  1918. X    But that's the nice thing about metaconfig--you generate a new
  1919. X    Configure script and also get the changes you don't need (yet).
  1920. X
  1921. XFix:    From rn, say "| patch -d DIR", where DIR is your perl source
  1922. X    directory.  Outside of rn, say "cd DIR; patch <thisarticle".
  1923. X    If you don't have the patch program, apply the following by hand,
  1924. X    or get patch.
  1925. X
  1926. X    If patch indicates that patchlevel is the wrong version, you may need
  1927. X    to apply one or more previous patches, or the patch may already
  1928. X    have been applied.  See the patchlevel.h file to find out what has or
  1929. X    has not been applied.  In any event, don't continue with the patch.
  1930. X
  1931. X    If you are missing previous patches they can be obtained from me:
  1932. X
  1933. X    Larry Wall
  1934. X    lwall@jpl-devvax.jpl.nasa.gov
  1935. X
  1936. X    If you send a mail message of the following form it will greatly speed
  1937. X    processing:
  1938. X
  1939. X    Subject: Command
  1940. X    @SH mailpatch PATH perl 1.0 LIST
  1941. X           ^ note the c
  1942. X
  1943. X    where PATH is a return path FROM ME TO YOU in Internet notation, and
  1944. X    LIST is the number of one or more patches you need, separated by spaces,
  1945. X    commas, and/or hyphens.  Saying 35- says everything from 35 to the end.
  1946. X
  1947. X    You can also get the patches via anonymous FTP from
  1948. X    jpl-devvax.jpl.nasa.gov (128.149.8.43).
  1949. X
  1950. XIndex: patchlevel.h
  1951. XPrereq: 8
  1952. X1c1
  1953. X< #define PATCHLEVEL 8
  1954. X---
  1955. X> #define PATCHLEVEL 9
  1956. XIndex: Configure
  1957. XPrereq: 1.0.1.3
  1958. X*** Configure.old    Sat Jan 30 08:57:50 1988
  1959. X--- Configure    Sat Jan 30 08:57:54 1988
  1960. X***************
  1961. X*** 8,14 ****
  1962. X  # and edit it to reflect your system.  Some packages may include samples
  1963. X  # of config.h for certain machines, so you might look for one of those.)
  1964. X  #
  1965. X! # $Header: Configure,v 1.0.1.3 88/01/26 14:14:14 root Exp $
  1966. X  #
  1967. X  # Yes, you may rip this off to use in other distribution packages.
  1968. X  # (Note: this Configure script was generated automatically.  Rather than
  1969. X--- 8,14 ----
  1970. X  # and edit it to reflect your system.  Some packages may include samples
  1971. X  # of config.h for certain machines, so you might look for one of those.)
  1972. X  #
  1973. X! # $Header: Configure,v 1.0.1.4 88/01/30 08:51:49 root Exp $
  1974. X  #
  1975. X  # Yes, you may rip this off to use in other distribution packages.
  1976. X  # (Note: this Configure script was generated automatically.  Rather than
  1977. X***************
  1978. X*** 998,1004 ****
  1979. X  echo exit 1 >>/tmp/Cppsym\$\$
  1980. X  $cpp $cppminus </tmp/Cppsym\$\$ >/tmp/Cppsym2\$\$
  1981. X  case "\$list" in
  1982. X! true) awk '\$6 != "" {print substr(\$6,2,100)}' </tmp/Cppsym2\$\$ ;;
  1983. X  *)
  1984. X      sh /tmp/Cppsym2\$\$
  1985. X      status=\$?
  1986. X--- 998,1004 ----
  1987. X  echo exit 1 >>/tmp/Cppsym\$\$
  1988. X  $cpp $cppminus </tmp/Cppsym\$\$ >/tmp/Cppsym2\$\$
  1989. X  case "\$list" in
  1990. X! true) awk 'NF > 5 {print substr(\$6,2,100)}' </tmp/Cppsym2\$\$ ;;
  1991. X  *)
  1992. X      sh /tmp/Cppsym2\$\$
  1993. X      status=\$?
  1994. X***************
  1995. X*** 1379,1385 ****
  1996. X  
  1997. X  echo " "
  1998. X  echo "Doing variable substitutions on .SH files..."
  1999. X! set x `$grep '\.SH' <MANIFEST | awk '{print $1}'`
  2000. X  shift
  2001. X  case $# in
  2002. X  0) set x *.SH; shift;;
  2003. X--- 1379,1385 ----
  2004. X  
  2005. X  echo " "
  2006. X  echo "Doing variable substitutions on .SH files..."
  2007. X! set x `awk '{print $1}' <MANIFEST | $grep '\.SH'`
  2008. X  shift
  2009. X  case $# in
  2010. X  0) set x *.SH; shift;;
  2011. XIndex: arg.c
  2012. XPrereq: 1.0.1.4
  2013. X*** arg.c.old    Sat Jan 30 08:58:14 1988
  2014. X--- arg.c    Sat Jan 30 08:58:19 1988
  2015. X***************
  2016. X*** 1,6 ****
  2017. X! /* $Header: arg.c,v 1.0.1.4 88/01/28 10:22:06 root Exp $
  2018. X   *
  2019. X   * $Log:    arg.c,v $
  2020. X   * Revision 1.0.1.4  88/01/28  10:22:06  root
  2021. X   * patch8: added eval operator.
  2022. X   * 
  2023. X--- 1,9 ----
  2024. X! /* $Header: arg.c,v 1.0.1.5 88/01/30 08:53:16 root Exp $
  2025. X   *
  2026. X   * $Log:    arg.c,v $
  2027. X+  * Revision 1.0.1.5  88/01/30  08:53:16  root
  2028. X+  * patch9: fixed some missing right parens introduced (?) by patch 2
  2029. X+  * 
  2030. X   * Revision 1.0.1.4  88/01/28  10:22:06  root
  2031. X   * patch8: added eval operator.
  2032. X   * 
  2033. X***************
  2034. X*** 552,559 ****
  2035. X          apush(ary,str_nmake((double)statbuf.st_blksize));
  2036. X          apush(ary,str_nmake((double)statbuf.st_blocks));
  2037. X  #else
  2038. X!         apush(ary,str_make("");
  2039. X!         apush(ary,str_make("");
  2040. X  #endif
  2041. X      }
  2042. X      sarg = (STR**)safemalloc((max+2)*sizeof(STR*));
  2043. X--- 555,562 ----
  2044. X          apush(ary,str_nmake((double)statbuf.st_blksize));
  2045. X          apush(ary,str_nmake((double)statbuf.st_blocks));
  2046. X  #else
  2047. X!         apush(ary,str_make(""));
  2048. X!         apush(ary,str_make(""));
  2049. X  #endif
  2050. X      }
  2051. X      sarg = (STR**)safemalloc((max+2)*sizeof(STR*));
  2052. XIndex: perl.h
  2053. XPrereq: 1.0.1.3
  2054. X*** perl.h.old    Sat Jan 30 08:58:36 1988
  2055. X--- perl.h    Sat Jan 30 08:58:36 1988
  2056. X***************
  2057. X*** 1,6 ****
  2058. X! /* $Header: perl.h,v 1.0.1.3 88/01/28 10:24:17 root Exp $
  2059. X   *
  2060. X   * $Log:    perl.h,v $
  2061. X   * Revision 1.0.1.3  88/01/28  10:24:17  root
  2062. X   * patch8: added eval operator.
  2063. X   * 
  2064. X--- 1,9 ----
  2065. X! /* $Header: perl.h,v 1.0.1.4 88/01/30 08:54:00 root Exp $
  2066. X   *
  2067. X   * $Log:    perl.h,v $
  2068. X+  * Revision 1.0.1.4  88/01/30  08:54:00  root
  2069. X+  * patch9: changed #define YYDEBUG; to #define YYDEBUG 1
  2070. X+  * 
  2071. X   * Revision 1.0.1.3  88/01/28  10:24:17  root
  2072. X   * patch8: added eval operator.
  2073. X   * 
  2074. X***************
  2075. X*** 184,190 ****
  2076. X  EXT int dlevel INIT(0);
  2077. X  EXT char debname[40];
  2078. X  EXT char debdelim[40];
  2079. X! #define YYDEBUG;
  2080. X  extern int yydebug;
  2081. X  #endif
  2082. X  
  2083. X--- 187,193 ----
  2084. X  EXT int dlevel INIT(0);
  2085. X  EXT char debname[40];
  2086. X  EXT char debdelim[40];
  2087. X! #define YYDEBUG 1
  2088. X  extern int yydebug;
  2089. X  #endif
  2090. X  
  2091. END_OF_FILE
  2092. if test 6348 -ne `wc -c <'patch9'`; then
  2093.     echo shar: \"'patch9'\" unpacked with wrong size!
  2094. fi
  2095. # end of 'patch9'
  2096. fi
  2097. if test -f 'patch10' -a "${1}" != "-c" ; then 
  2098.   echo shar: Will not clobber existing file \"'patch10'\"
  2099. else
  2100. echo shar: Extracting \"'patch10'\" \(3233 characters\)
  2101. sed "s/^X//" >'patch10' <<'END_OF_FILE'
  2102. XPath: bbn.com!bbn!husc6!rutgers!ames!elroy!devvax!lroot
  2103. XFrom: lroot@devvax.JPL.NASA.GOV (The Superuser)
  2104. XNewsgroups: comp.sources.bugs
  2105. XSubject: perl 1.0 patch #10
  2106. XSummary: This is an official patch for perl 1.0.  Please apply it.
  2107. XMessage-ID: <1188@devvax.JPL.NASA.GOV>
  2108. XDate: 30 Jan 88 17:25:46 GMT
  2109. XOrganization: Jet Propulsion Laboratory, Pasadena, CA
  2110. XLines: 84
  2111. X
  2112. XSystem: perl version 1.0
  2113. XPatch #: 10
  2114. XPriority: LOW
  2115. XSubject: if your libc is in a strange place, Configure blows up
  2116. XFrom: Peter E. Yee <yee@trident.arc.nasa.gov>
  2117. X
  2118. XDescription:
  2119. X    There's a line in Configure that says libc=ans which should say
  2120. X    libc=$ans.  This only shows up if libc.a isn't in /lib.
  2121. X
  2122. XFix:    From rn, say "| patch -d DIR", where DIR is your perl source
  2123. X    directory.  Outside of rn, say "cd DIR; patch <thisarticle".
  2124. X    If you don't have the patch program, apply the following by hand,
  2125. X    or get patch.
  2126. X
  2127. X    If patch indicates that patchlevel is the wrong version, you may need
  2128. X    to apply one or more previous patches, or the patch may already
  2129. X    have been applied.  See the patchlevel.h file to find out what has or
  2130. X    has not been applied.  In any event, don't continue with the patch.
  2131. X
  2132. X    If you are missing previous patches they can be obtained from me:
  2133. X
  2134. X    Larry Wall
  2135. X    lwall@jpl-devvax.jpl.nasa.gov
  2136. X
  2137. X    If you send a mail message of the following form it will greatly speed
  2138. X    processing:
  2139. X
  2140. X    Subject: Command
  2141. X    @SH mailpatch PATH perl 1.0 LIST
  2142. X           ^ note the c
  2143. X
  2144. X    where PATH is a return path FROM ME TO YOU in Internet notation, and
  2145. X    LIST is the number of one or more patches you need, separated by spaces,
  2146. X    commas, and/or hyphens.  Saying 35- says everything from 35 to the end.
  2147. X
  2148. X    You can also get the patches via anonymous FTP from
  2149. X    jpl-devvax.jpl.nasa.gov (128.149.8.43).
  2150. X
  2151. XIndex: patchlevel.h
  2152. XPrereq: 9
  2153. X1c1
  2154. X< #define PATCHLEVEL 9
  2155. X---
  2156. X> #define PATCHLEVEL 10
  2157. XIndex: Configure
  2158. XPrereq: 1.0.1.4
  2159. X*** Configure.old    Sat Jan 30 09:22:10 1988
  2160. X--- Configure    Sat Jan 30 09:22:13 1988
  2161. X***************
  2162. X*** 8,14 ****
  2163. X  # and edit it to reflect your system.  Some packages may include samples
  2164. X  # of config.h for certain machines, so you might look for one of those.)
  2165. X  #
  2166. X! # $Header: Configure,v 1.0.1.4 88/01/30 08:51:49 root Exp $
  2167. X  #
  2168. X  # Yes, you may rip this off to use in other distribution packages.
  2169. X  # (Note: this Configure script was generated automatically.  Rather than
  2170. X--- 8,14 ----
  2171. X  # and edit it to reflect your system.  Some packages may include samples
  2172. X  # of config.h for certain machines, so you might look for one of those.)
  2173. X  #
  2174. X! # $Header: Configure,v 1.0.1.5 88/01/30 09:21:20 root Exp $
  2175. X  #
  2176. X  # Yes, you may rip this off to use in other distribution packages.
  2177. X  # (Note: this Configure script was generated automatically.  Rather than
  2178. X***************
  2179. X*** 398,404 ****
  2180. X      ans=`loc libc.a blurfl/dyick $libpth`
  2181. X      if test -f $ans; then
  2182. X      echo "Your C library is in $ans, of all places."
  2183. X!     libc=ans
  2184. X      else
  2185. X      if test -f "$libc"; then
  2186. X          echo "Your C library is in $libc, like you said before."
  2187. X--- 398,404 ----
  2188. X      ans=`loc libc.a blurfl/dyick $libpth`
  2189. X      if test -f $ans; then
  2190. X      echo "Your C library is in $ans, of all places."
  2191. X!     libc=$ans
  2192. X      else
  2193. X      if test -f "$libc"; then
  2194. X          echo "Your C library is in $libc, like you said before."
  2195. END_OF_FILE
  2196. if test 3233 -ne `wc -c <'patch10'`; then
  2197.     echo shar: \"'patch10'\" unpacked with wrong size!
  2198. fi
  2199. # end of 'patch10'
  2200. fi
  2201. echo shar: End of shell archive.
  2202. exit 0
  2203.